package com.extend.api;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;


public class Main {

    public static void main(String[] args) throws ParseException {
//        dateUse();

//        simpleDateFormat();

//        timeStringify();
//
//        timeParse();
//
//        between();
//
//        duration();
//        system();

        /**
         * 随机生成10个[10,100]之间的整数，放到整数数组中，按照从小到大的顺序排序并打印元素内容。
         */

//        System.out.println(checkQQ("a1023434"));

        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.remove(2);
        System.out.println(list);
    }

    public static boolean checkQQ2(String qq) {
        return qq.matches("[1-9]]\\d{4,14}");
    }



    /**
     * 输入一个 QQ 号码，验证 QQ 号码的合法性
     * 1. QQ 号码必须是 5 ～ 15 位长度
     * 2. 必须全部是数字
     * 3. 首位不能位 0
     */

    public static boolean checkQQ(String qq) {
        int len = qq.length();
        // 1. QQ 号码必须是 5 ～ 15 位长度
        if (len < 5 || len > 15) {
            return false;
        }
        // len: [5,15]
        // 3. 首位不能位 0
        if (qq.charAt(0) == '0') {
            return false;
        }
        // 2. 必须全部是数字
        for (int i = 0; i < len; i++) {
            char ch = qq.charAt(i);
            if (ch > '9' || ch < '0') {
                return false;
            }
        }
        return true;
    }


    private static void system() {
        long startTime = System.currentTimeMillis();
        System.out.println(startTime);
        for (int i = 0; i < 100000; i++) {
            System.out.println(i);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(endTime);

        long costTime = endTime - startTime;
        System.out.println("costTime: " + costTime);
    }

    private static void duration() {
        // 计算两个时间的间隔
        LocalDateTime startTime = LocalDateTime.of(2015, 9, 10, 10, 0, 0);
        LocalDateTime endTime = LocalDateTime.of(2023, 10, 10, 10, 0, 0);
        Duration duration = Duration.between(startTime, endTime);
        System.out.println(duration.toDays()); // 2952 间隔的天数
        System.out.println(duration.toHours()); // 70848
    }

    private static void between() {
        //         Period.between(开始时间，结束时间) 年月日的间隔
        LocalDate begin = LocalDate.of(2020, 10, 20);
        LocalDate end = LocalDate.of(2023, 12, 12);
        Period period = Period.between(begin, end);
        int totalYears = period.getYears();
        int totalMonths = period.getMonths();
        int totalDays = period.getDays();
        // 3-1-22
        System.out.println(totalYears + "-" + totalMonths + "-" + totalDays);
        // 总共的时间间隔：可以通过自己来计算。例如可以利用年来计算总月份 年 * 12
    }

    private static void timeParse() {
        // String --> 日期对象
        String strData = "2023/10/10 10:00:00";
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(strData, dateTimeFormatter);
        System.out.println(dateTime); // 2023-10-10T10:00
    }

    private static void timeStringify() {
        //  日期 --> String
        LocalDateTime now = LocalDateTime.now();
        // DateTimeFormatter 日期格式化类
        // dateTimeFormatter 日期格式化对象
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String s = now.format(dateTimeFormatter);
        System.out.println(s); // 2023-10-13 10:04:55
    }

    private static void simpleDateFormat() throws ParseException {
        // 获取当前日期对象，使用格式：yyyy-MM-dd HH:mm:ss 来表示，例如 2020-10-31 17:30:30 【格式化】
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a E");
        Date date = new Date();
        String formatDate = sdf.format(date);
        System.out.println(formatDate); // 2023-10-13 08:20:04

        // 将字符串的 2023年10月13日  17:00:00，转换为日期 Date 对象。【解析】
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date2 = sdf2.parse("2023年10月13日  17:00:00");
        System.out.println(date2); // Fri Oct 13 17:00:00 CST 2023

        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy、MM、dd HH:mm:ss");
        Date date3 = sdf3.parse("2023、10、13  17:00:00");
        System.out.println(date2); // Fri Oct 13 17:00:00 CST 2023
    }

    private static void dateUse() {
        Date date = new Date();
        System.out.println(date);

        Date date1 = new Date(10L * 24 * 60 * 60 * 1000);
        System.out.println(date1);


        System.out.println(date.getTime());
        System.out.println(date1.getTime());

        Date date2 = new Date();

        date2.setTime(10L * 24 * 60 * 60 * 1000);
        System.out.println(date2);
    }
}
